# 抖码算法，让算法学习变得简单有趣
# 作者：老汤

line = str(input()).split(" ")
m, n = int(line[0]), int(line[1])
geo = [[0] * n for _ in range(m)]
for i in range(m):
    nums = str(input()).split(" ")
    for j in range(n):
        geo[i][j] = int(nums[j])
# 上下左右
dirs = [[-1, 0], [1, 0], [0, -1], [0, 1]]
# 因为有 2 个人，每个人都要走一遍所有的元素
# 所以每个人都要设置一个 visited 数组
# 以下代码相当于： visited = new boolean[2][m][n];
visited = [[[False] * n for _ in range(m) ] for _ in range(2)]

res = 0


def in_area(row, col) -> bool:
    return 0 <= row < m and 0 <= col < n


def dfs(row, col, num) -> None:
    if (not in_area(row, col)  # 出界了
            or geo[row][col] == 1  # 遇到障碍物了
            or visited[num][row][col]): # 已经被访问过了
        return
    visited[num][row][col] = True
    # 如果当前元素就是聚餐地点，并且第一个人已经访问过了这个聚餐地点，现在是第二个人访问这个聚餐地点
    # 所以，这个聚餐地点两个人都可以到达
    if (geo[row][col] == 3 # 当前地点是聚餐地点
            and visited[0][row][col]  # 第一个人已经访问过这个聚餐地点
            and num == 1): # 现在是第二个人访问这个聚餐地点
        global res
        res += 1
    for d in dirs:
        next_row, next_col = row + d[0], col + d[1]
        dfs(next_row, next_col, num)


# num 表示谁，如果是 0 的话，表示第一个人，1 的话表示第二个人
num = -1
for row in range(m):
    for col in range(n):
        if geo[row][col] == 2:
            # 可能是小华或者小为，那么寻找
            num += 1
            dfs(row, col, num)
print(res)